
package de.midnightdance.admin.ws;

import java.beans.PropertyChangeSupport;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

import de.cbf.util.ui.editentities.interfaces.IEditableEntity;
import de.midnightdance.admin.ws.entities.UuidHeader;


/**
 * <p>Java class for vorteil complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="vorteil">
 *   &lt;complexContent>
 *     &lt;extension base="{http://service.server.midnightdance.de/}uuidHeader">
 *       &lt;sequence>
 *         &lt;element name="besonderheit" type="{http://www.w3.org/2001/XMLSchema}int"/>          
 *         &lt;element name="limitiert" type="{http://www.w3.org/2001/XMLSchema}int"/>
 *         &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="punkte" type="{http://www.w3.org/2001/XMLSchema}int"/>
 *       &lt;/sequence>
 *     &lt;/extension>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "vorteil", propOrder = {
    "besonderheit",    
    "limitiert",
    "name",
    "punkte"    
})
public class VorteilDB
    extends UuidHeader implements IEditableEntity
{
	public static final int STERBLICH 	= 1<<2;
	public static final int START		= 1<<3;
	
    public static final int PCE_INDEX_besonderheit	= 1;    
    public static final int PCE_INDEX_name 			= 2;
    public static final int PCE_INDEX_punkte 		= 3;    
    public static final int PCE_INDEX_limitiert 	= 4;
    //	    
    protected int 		limitiert;
    protected String 	name;
    protected int 		punkte;    
    protected int 		besonderheit;
    @XmlTransient
    protected PropertyChangeSupport propertyChangeSupport;
    
    public VorteilDB() {
		super();
		propertyChangeSupport = new PropertyChangeSupport(this);
		name = "";
	}

    protected void takeOverEntityData(Object aOther) {
		if (aOther instanceof VorteilDB) {
			VorteilDB otherVorteil = (VorteilDB) aOther;			
			this.name			= otherVorteil.name;
			this.punkte			= otherVorteil.punkte;			
			this.limitiert		= otherVorteil.limitiert;			
			//			
			this.besonderheit 	= otherVorteil.besonderheit;
		}
	}
	@Override
	public void takeOverValuesFrom(IEditableEntity entity)
			throws IllegalArgumentException {
		if (entity instanceof VorteilDB) {
			VorteilDB otherVorteil = (VorteilDB) entity;
			takeOverEntityData(otherVorteil);
		}else{
			throw new IllegalArgumentException("Expected: "+VorteilDB.class+", Got: "+entity.getClass());
		}		
	}

	@Override
	public IEditableEntity cloneEntity() {
		VorteilDB result = new VorteilDB();
		result.takeOverEntityData(this);
		return result;
	}
	@Override
	public PropertyChangeSupport getPropertyChangeSupport() {
		return propertyChangeSupport;
	}
	/**
     * Gets the value of the besonderheit property.
     * 
     */
    public int getBesonderheit() {
        return besonderheit;
    }

    /**
     * Sets the value of the besonderheit property.
     * 
     */
    public void setBesonderheit(int value) {        
        if(value == besonderheit)return;
		int oldbesonderheit = besonderheit;
		besonderheit = value;
		propertyChangeSupport.fireIndexedPropertyChange("besonderheit", PCE_INDEX_besonderheit, oldbesonderheit, besonderheit);
    }

    /**
     * Gets the value of the limitiert property.
     * 
     */
    public int getLimitiert() {
        return limitiert;
    }

    /**
     * Sets the value of the limitiert property.
     * 
     */
    public void setLimitiert(int value) {
       if(value == limitiert)return;
		int oldlimitiert = limitiert;
		limitiert = value;
		propertyChangeSupport.fireIndexedPropertyChange("limitiert", PCE_INDEX_limitiert, oldlimitiert, limitiert);
    }

    /**
     * Gets the value of the name property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getName() {
        return name;
    }

    /**
     * Sets the value of the name property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setName(String value) {
        if(value == null || value.equals(name))return;
		String oldname = name;
		name = value;
		propertyChangeSupport.fireIndexedPropertyChange("name", PCE_INDEX_name, oldname, name);
    }

    /**
     * Gets the value of the punkte property.
     * 
     */
    public int getPunkte() {
        return punkte;
    }

    /**
     * Sets the value of the punkte property.
     * 
     */
    public void setPunkte(int value) {
    	if(value == punkte)return;
		int oldpunkte = punkte;
		punkte = value;
		propertyChangeSupport.fireIndexedPropertyChange("punkte", PCE_INDEX_punkte, oldpunkte,punkte);           
    }

    /**
     * Gets the value of the start property.
     * 
     */
    public boolean isStart() {
    	return (besonderheit&START) != 0;
    }

    /**
     * Sets the value of the start property.
     * 
     */
    public void setStart(boolean value) {
    	setBesonderheit(besonderheit|START);        
    }

    /**
     * Gets the value of the sterblich property.
     * 
     */
    public boolean isSterblich() {
    	return (besonderheit&STERBLICH) != 0;
    }

    /**
     * Sets the value of the sterblich property.
     * 
     */
    public void setSterblich(boolean value) {
    	setBesonderheit(besonderheit|STERBLICH);        
    }

   
	

}
